fix reversion
authorJoey Hess <joeyh@joeyh.name>
Wed, 22 Jan 2025 19:32:21 +0000 (15:32 -0400)
committerJoey Hess <joeyh@joeyh.name>
Wed, 22 Jan 2025 19:32:21 +0000 (15:32 -0400)
In 793ddecd4b72a5e4746b3b426d3bca400737118b, writeSshConfig was made to
writeFile a ByteString, which lost the newline conversion on Windows.

Added linesFile to fix it. This will also be useful for other writeFile
conversions.

Utility/Misc.hs
Utility/SshConfig.hs

index d30cce25242b87e3047e446e279be47958362ca9..50982e6cf8a82734303cfabd60a22ef68d85b455 100644 (file)
@@ -1,6 +1,6 @@
 {- misc utility functions
  -
- - Copyright 2010-2011 Joey Hess <id@joeyh.name>
+ - Copyright 2010-2025 Joey Hess <id@joeyh.name>
  -
  - License: BSD-2-clause
  -}
@@ -18,6 +18,8 @@ module Utility.Misc (
        firstLine',
        fileLines,
        fileLines',
+       linesFile,
+       linesFile',
        segment,
        segmentDelim,
        massReplace,
@@ -113,6 +115,22 @@ fileLines' = map stripCR . S8.lines
 fileLines' = S8.lines
 #endif
 
+-- One windows, writeFile does NewlineMode translation,
+-- adding CR before LF. When converting to ByteString, use this to emulate that.
+linesFile :: L.ByteString -> L.ByteString
+#ifndef mingw32_HOST_OS
+linesFile = id
+#else
+linesFile = L8.concat . concatMap (\x -> [x, L8.pack "\r\n"]) . fileLines
+#endif
+
+linesFile' :: S.ByteString -> S.ByteString
+#ifndef mingw32_HOST_OS
+linesFile' = id
+#else
+linesFile' = S8.concat . concatMap (\x -> [x, S8.pack "\r\n"]) . fileLines'
+#endif
+
 {- Splits a list into segments that are delimited by items matching
  - a predicate. (The delimiters are not included in the segments.)
  - Segments may be empty. -}
index d43347d7f180d588ad91b6fc23e4cc4fbd7ff32b..8657beef7a74419f1763144f8951423620d7c566 100644 (file)
@@ -145,7 +145,7 @@ changeUserSshConfig modifier = do
 
 writeSshConfig :: OsPath -> String -> IO ()
 writeSshConfig f s = do
-       F.writeFile' f (encodeBS s)
+       F.writeFile' f (linesFile' (encodeBS s))
        setSshConfigMode (fromOsPath f)
 
 {- Ensure that the ssh config file lacks any group or other write bits,